Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Eccomi qua con un'altro problema XD Stavolta sulla GDI+.
Innanzi tutto vorrei ringraziarmi per il supporto che mi avete dato prima, grazie mille .
Passiamo al problema. La mia intenzione sarebbe quella di far ruotare su sè stessa un'immagine quando il mouse entra in un panel.
Ecco il mio codice
Codice sorgente - presumibilmente C# / VB.NET |
//in pnlProva_MouseEnter c'è il codice timer1.Start();
//g è un Graphic e imgprova è una Image
private void timer1_Tick(object sender, EventArgs e)
{
float prova = 1;
g.DrawImage(imgprova, pnlProva.ClientRectangle);
g.RotateTransform(prova);
Invalidate();
}
|
Ora ci sono diversi problemi.. Innanzi tutto quando parte il timer avviene la rotazione su cordinate 0,0. Ho provato a usare g.TranslateTransform, ma quando inserisco come centro di rotazione il centro dell'immagine non ruota niente...
Poi con il metodo Invalidate mi rimane anche l'immagine prima della rotazione, come posso eliminarla?.
Il mio scopo sarebbe che una volta entrato il mouse nel panel l'immagine ruotasse su sè stessa all'infinito
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2316
Iscritto: 04/05/2008
|
Ovvio che non ti deve ruotare!
Codice sorgente - presumibilmente C# / VB.NET |
//in pnlProva_MouseEnter c'è il codice timer1.Start();
//g è un Graphic e imgprova è una Image
private void timer1_Tick(object sender, EventArgs e)
{
float prova = 1;
g.DrawImage(imgprova, pnlProva.ClientRectangle);
g.RotateTransform(prova);
Invalidate();
}
|
#Errore 1 float prova = 1;
#Errore 2 g.RotateTransform(prova);
che fai? assegni al ciclo sempre un float da 1. senza incrementarlo e ovviamente senza avere nessuna rotazione
devi incrementare la var prova e non dichiararla nel ciclo ma globale
cosi.
Codice sorgente - presumibilmente C# / VB.NET |
float prova = 1.0f;
private void timer1_Tick(object sender, EventArgs e)
{
g.DrawImage(imgprova, pnlProva.ClientRectangle);
g.RotateTransform(prova);
Invalidate();
prova = prova + 0.1f; //velocità di rotazione
}
|
prova in questo modo.
|
|
Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Funziona anche con il float che rimane a 1 perchè essendo in timer non c'è bisogno di incrementare la variabile poichè la rotazione dell'immagine aumenta. (esempio all'inizione timer la rotazione è 0 poi aumenta ogni volta che gira il timer, se provi il mio codice funziona).
Il problema è che io voglio impostare il centro di rotazione con il centro dell'imagine in modo che essa giri intorno al suo centro e in più vorrei che l'immagine precedente venisse cancellata dal Graphics, cosa che con Invalidate() non avviene.
|
|
Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Porto nuovi aggiornamenti.
Allora dopo lunghe ed estenuanti googlate ho usato questo sistema da mettere nel timer:
Codice sorgente - presumibilmente C# / VB.NET |
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipXY);
pictureBox1.Refresh();
}
|
Ora funziona esattamente come voglio io, se non fosse per il fatto che io vorrei che ruotasse un po' più piano. Così mi viene mal di testa XD
Edit: So che non è possibile modificare il metodo RotateFlipType. Vorrei sapere come fare una cosa simile.
Ultima modifica effettuata da Hast il 11/09/2009 alle 20:13 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ruota di 90 gradi alla volta...
|
|
r0gerblack (Ex-Member)
Pro
Messaggi: 70
Iscritto: 04/08/2008
|
Totem ha ragione, ti conviene mettere a 2
|
|
Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Postato originariamente da Il Totem:
Ruota di 90 gradi alla volta... |
Ruota già di 90 alla volta, io voglio fare qualcosa di simile al RotateFlip poichè quello non lo posso modificare. Il rotateflip mi serviva come esempio per far capire ciò che volevo fare.
Totem ha ragione, ti conviene mettere a 2
|
Sorry non ho capito... Cosa devo mettere a 2? |
|
r0gerblack (Ex-Member)
Pro
Messaggi: 70
Iscritto: 04/08/2008
|
mettere a 2 gradi la rotazione
|
|
Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Postato originariamente da r0gerblack:
mettere a 2 gradi la rotazione |
Come faccio? Il RotateFlip c'è solo di 90 180 e 270 gradi |
|